//package com.ruoyi.common.core.redis;
//
//import com.alibaba.fastjson.JSON;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import redis.clients.jedis.Jedis;
//
//import java.util.*;
//
///**
// * @description: redis client
// * @author: caoes
// * create:2021/10/20 17:13
// **/
//@Component
//public class RedisClient {
//
//    @Autowired
//    private RedisPool redisPool;
//
//    /**
//     * 设置字符串
//     * @param key
//     * @param value
//     * @return
//     */
//    public boolean set(String key, String value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            jedis.set(key, value);
//            return true;
//        }
//    }
//
//    /**
//     * 设置有时效的字符串
//     * @param key
//     * @param seconds
//     * @param value
//     * @return
//     */
//    public boolean setEx(String key, int seconds, String value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            jedis.setex(key, seconds, value);
//            return true;
//        }
//    }
//
//    /**
//     * 当且仅当 key 不存在，将 key 的值设为 value ，并返回 1
//     * 若给定的 key 已经存在，则 setNx 不做任何动作，并返回 0
//     * @param key
//     * @param value
//     * @return
//     */
//    public int setNx(String key, String value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.setnx(key, value).intValue();
//        }
//    }
//
//    /**
//     * 获取key的过期时间
//     * @param key
//     * @return
//     */
//    public Long ttl(String key) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            Long time = jedis.ttl(key);
//            return time;
//        }
//    }
//
//    /**
//     * 获取字符串
//     * @param key
//     * @return
//     */
//    public Object get(String key) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            Object value = jedis.get(key);
//            return value;
//        }
//    }
//
//    /**
//     * 设置新值，返回旧值
//     * @param key
//     * @param newValue
//     * @return
//     */
//    public Object getSet(String key, String newValue) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            Object value = jedis.getSet(key, newValue);
//            return value;
//        }
//    }
//
//    /**
//     * 判断对象是否存在
//     * @param key
//     * @return
//     */
//    public boolean exists(String key) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.exists(key);
//        }
//    }
//
//    /**
//     * 删除对象
//     * @param key
//     * @return
//     */
//    public boolean del(String key) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            jedis.del(key);
//            return true;
//        }
//    }
//
//    /**
//     * 设置对象
//     * @param key
//     * @param value
//     * @return
//     */
//    public boolean setObj(String key, Object value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String objectJson = JSON.toJSONString(value);
//            jedis.set(key, objectJson);
//            return true;
//        }
//    }
//
//    /**
//     * 设置时效的对象
//     * @param key
//     * @param seconds
//     * @param value
//     * @return
//     */
//    public boolean setExObj(String key, int seconds, Object value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String objectJson = JSON.toJSONString(value);
//            jedis.setex(key, seconds, objectJson);
//            return true;
//        }
//    }
//
//    /**
//     * 获取对象
//     * @param key
//     * @param clazz
//     * @param <T>
//     * @return
//     */
//    public <T> T getObj(String key, Class<T> clazz) {
//        try (Jedis jedis = redisPool.getJedis()) {
//
//            String value = jedis.get(key);
//            return JSON.parseObject(value, clazz);
//        }
//    }
//
//    /**
//     * 键值自增
//     * @param key
//     * @return
//     */
//    public Long incr(String key) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.incr(key);
//        }
//    }
//
//    /**
//     * 键值自增，带步长
//     * @param key
//     * @param increment
//     * @return
//     */
//    public Long incrBy(String key, Long increment) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.incrBy(key, increment);
//        }
//    }
//
//    /**
//     * 键值自减
//     * @param key
//     * @return
//     */
//    public Long decr(String key) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.decr(key);
//        }
//    }
//
//    /**
//     * 键值自减，带步长
//     * @param key
//     * @param increment
//     * @return
//     */
//    public Long decrBy(String key, Long increment) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.decrBy(key, increment);
//        }
//    }
//
//    /**
//     * 对象放入队列头（左入）
//     * @param key
//     * @param value
//     * @return
//     */
//    public boolean lpush(String key, Object value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String objectJson = JSON.toJSONString(value);
//            jedis.lpush(key, objectJson);
//            return true;
//        }
//    }
//
//    /**
//     * 对象放入队列尾（右入）
//     * @param key
//     * @param value
//     * @return
//     */
//    public boolean rpush(String key, Object value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String objectJson = JSON.toJSONString(value);
//            jedis.rpush(key, objectJson);
//            return true;
//        }
//    }
//
//    /**
//     * 移除并返回列表 key 的尾元素（右出）
//     * @param key
//     * @param clazz
//     * @param <T>
//     * @return
//     */
//    public <T> T rpop(String key, Class<T> clazz) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String value = jedis.rpop(key);
//            return JSON.parseObject(value, clazz);
//        }
//    }
//
//    /**
//     * 移除并返回列表 key 的尾元素（左出）
//     * @param key
//     * @param clazz
//     * @param <T>
//     * @return
//     */
//    public <T> T lpop(String key, Class<T> clazz) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String value = jedis.lpop(key);
//            return JSON.parseObject(value, clazz);
//        }
//    }
//
//    /**
//     * 返回列表 key 中，下标为 index 的对象
//     * @param key
//     * @param index
//     * @param clazz
//     * @param <T>
//     * @return
//     */
//    public <T> T lindex(String key, long index, Class<T> clazz) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String value = jedis.lindex(key, index);
//            return JSON.parseObject(value, clazz);
//        }
//    }
//
//    /**
//     * 返回列表 key 的长度 llen
//     * @param key
//     * @return
//     */
//    public long llen(String key) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.llen(key);
//        }
//    }
//
//    /**
//     * 向set中添加一个元素，成功返回1，否则返回0
//     * @param key
//     * @param value
//     * @return
//     */
//    public int sadd(String key, String value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.sadd(key, value).intValue();
//        }
//    }
//
//    /**
//     * 从set中删除指定元素，成功返回1，否则返回0
//     * @param key
//     * @param value
//     * @return
//     */
//    public int sdel(String key, String value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.srem(key, value).intValue();
//        }
//    }
//
//    /**
//     * 返回set集合所有的元素
//     * @param key
//     * @return
//     */
//    public Set<String> sget(String key) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.smembers(key);
//        }
//    }
//
//    /**
//     * 返回set集合中元素数量
//     * @param key
//     * @return
//     */
//    public Long scard(String key) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.scard(key);
//        }
//    }
//
//    /**
//     * 返回set集合的并集
//     * @param keys
//     * @return
//     */
//    public Set<String> sunion(String... keys) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.sunion(keys);
//        }
//    }
//
//    /**
//     * 返回set集合的交集
//     * @param keys
//     * @return
//     */
//    public Set<String> sinter(String... keys) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.sinter(keys);
//        }
//    }
//
//    /**
//     * 返回set集合的差集
//     * @param keys
//     * @return
//     */
//    public Set<String> sdiff(String... keys) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.sdiff(keys);
//        }
//    }
//
//    /**
//     * 返回哈希表所有的对象 hgetAll
//     * @param key
//     * @param clazz
//     * @param <T>
//     * @return
//     */
//    public <T> List<T> hgetAll(String key, Class<T> clazz) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            Map<String, String> objects = jedis.hgetAll(key);
//            List<T> clazzs = new ArrayList<T>();
//            Set<String> set = objects.keySet();// 返回Map中包含的键的 Set列表。
//            Iterator<String> it = set.iterator();// 获得列表迭代器
//            while (it.hasNext()) {
//                String objKey = it.next();
//                if (objects.containsKey(objKey)) {
//                    clazzs.add((T)JSON.parseObject(objects.get(objKey), clazz));
//                }
//            }
//            return clazzs;
//        }
//    }
//
//    public boolean hset(String key, String field, Object value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String objectJson = JSON.toJSONString(value);
//            jedis.hset(key, field, objectJson);
//            return true;
//        }
//    }
//
//    /**
//     * 获取哈希表中对象 hget
//     * @param key
//     * @param field
//     * @param clazz
//     * @param <T>
//     * @return
//     */
//    public <T> T hget(String key, String field, Class<T> clazz) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String value = jedis.hget(key, field);
//            return JSON.parseObject(value, clazz);
//        }
//    }
//
//    /**
//     * 返回哈希表 key 中域的数量 hlen
//     * @param key
//     * @return
//     */
//    public long lhen(String key) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            return jedis.hlen(key);
//        }
//    }
//
//    /**
//     * 删除哈希表 key 中的一个或多个指定域，不存在的域将被忽略 hdel
//     * @param key
//     * @param field
//     * @return
//     */
//    public boolean hdel(String key, String field) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            jedis.hdel(key, field);
//            return true;
//        }
//    }
//    /**
//     * score set加入元素
//     *
//     * @param key
//     * @param score
//     * @param value
//     */
//    public void zadd(String key, double score, Object value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String objectJson = JSON.toJSONString(value);
//            jedis.zadd(key, score, objectJson);
//        }
//    }
//
//    /**
//     * score set移除
//     *
//     * @param key
//     * @param value
//     */
//    public void zremove(String key, Object value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String objectJson = JSON.toJSONString(value);
//            jedis.zrem(key, objectJson);
//        }
//    }
//
//    /**
//     * 根据score范围获取list
//     *
//     * @param key
//     * @param min
//     * @param max
//     * @param clazz
//     * @return
//     */
//    public <T> List<T> zrangeByScore(String key, double min, double max, Class<T> clazz) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            Set<String> set = jedis.zrangeByScore(key, min, max);
//            List<T> clazzs = new ArrayList<T>();
//            Iterator<String> it = set.iterator();
//            while (it.hasNext()) {
//                clazzs.add((T)JSON.parseObject(it.next(), clazz));
//            }
//            return clazzs;
//        }
//    }
//
//    /**
//     * 根据成员获取score
//     *
//     * @param key
//     * @param value
//     * @return
//     */
//    public double zscore(String key, Object value) {
//        try (Jedis jedis = redisPool.getJedis()) {
//            String objectJson = JSON.toJSONString(value);
//            return jedis.zscore(key, objectJson);
//        }
//    }
//}
